package com.ruoyi.common.utils.aliyun;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Random;

/**
 * 	通用工具类
 * @author liuz
 *
 */
public class ThroughUtil {

	/** 自定义进制(0,1没有加入,容易与o,l混淆) */
	private static final char[] r=new char[]{'q', 'w', 'e', '8', 'a', 's', '2', 'd', 'z', 'x', '9', 'c', '7', 'p', '5', 'i', 'k', '3', 'm', 'j', 'u', 'f', 'r', '4', 'v', 'y', 'l', 't', 'n', '6', 'b', 'g', 'h'};

	/** (不能与自定义进制有重复) */
	private static final char b='o';

	/** 进制长度 */
	private static final int binLen=r.length;

	/** 序列最小长度 */
	private static final int s=6;

	/**
	 * 	随机生成昵称
	 * @return
	 */
	public static String randomGenerateNickName() {
		return "用户"+getNotNumber();
	}

	/**
	 * 	随机手机号码
	 * @param n
	 * @return
	 */
	public static String randomGeneratePhone(){
		String nowLong = String.valueOf((new SimpleDateFormat("ssSSS").format(new Date())));
		return "2"+nowLong+(int)((Math.random()*9+1)*10000);

	}

	/**
	 * 	随机生成头像
	 * @return
	 */
	public static String randomGenerateHeadPic() {
		return "https://xinyangxiong.oss-cn-beijing.aliyuncs.com/user/headPic.png";
	}

	/**
	 * 	使用java正则表达式去掉多余的.与0
	 * @param s
	 * @return 
	 */
	public static String subZeroAndDot(String s){
		if(s.indexOf(".") > 0){
			s = s.replaceAll("0+?$", "");//去掉多余的0
			s = s.replaceAll("[.]$", "");//如最后一位是.则去掉
		}
		return s;
	}
	private static double EARTH_RADIUS = 6371.393;
	private static double rad(double d){
		return d * Math.PI / 180.0;
	}
	public static double GetDistance(double lat1, double lng1, double lat2, double lng2){
		double radLat1 = rad(lat1);
		double radLat2 = rad(lat2);
		double a = radLat1 - radLat2;
		double b = rad(lng1) - rad(lng2);
		double s = 2 * Math.asin(Math.sqrt(Math.abs(Math.pow(Math.sin(a/2),2) +
				Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2))));
		s = s * EARTH_RADIUS;
		s = Math.round(s * 1000);
		return s;
	}

	/**
	 * 	判断是否为整数
	 * @param number
	 * @return
	 */
	@SuppressWarnings("unlikely-arg-type")
	public static boolean compareNumber(BigDecimal number){
		if (!"".equals(number) && number != null){
			if (new BigDecimal(number.intValue()).compareTo(number)==0){
				//整数
				return true;
			}else {
				//小数
				return false;
			}
		}
		return false;
	}

	/**
	 * 元转换成分
	 * 微信交易单位为分
	 */
	public static String castToCent(String amount) {
		if (amount == null) {
			return "";
		}
		return String.valueOf(BigDecimal.valueOf(Double.valueOf(amount) * 100).intValue());
	}

	/**
	 * 根据ID生成六位随机码
	 * @param id ID
	 * @return 随机码
	 */
	public static String toSerialCode(long id) {
		char[] buf=new char[32];
		int charPos=32;

		while((id / binLen) > 0) {
			int ind=(int)(id % binLen);
			buf[--charPos]=r[ind];
			id /= binLen;
		}
		buf[--charPos]=r[(int)(id % binLen)];
		String str=new String(buf, charPos, (32 - charPos));
		// 不够长度的自动随机补全
		if(str.length() < s) {
			StringBuilder sb=new StringBuilder();
			sb.append(b);
			Random rnd=new Random();
			for(int i=1; i < s - str.length(); i++) {
				sb.append(r[rnd.nextInt(binLen)]);
			}
			str+=sb.toString();
		}
		return str;
	}

	/**
	 * 	生成随机数
	 * @return
	 */
	public static String getNotNumber(){
		String randomStr = "";
		//1. 声明整型数组
		int[] numbers=new int[5];
		//2. 思路： 通过一个while循环来不断生成随机数，通过for循环来剔除重复的随机数
		int index = 0;//初始化需要的随机数 个数
		while (true) {
			int random = (int)(Math.random() * 9 + 1); //生成随机数1~32
			int j = 0;//后面需要对 j 进行判断，需要提升变量作用域
			for ( ; j < numbers.length ; j++) { // 遍历numbers数组，如果出现重复就跳出for循环
				if(random == numbers[j]) break;
			}
			if(j == numbers.length ) {
				numbers[index++] = random; // 说明没有重复，就可以存放随机数字到指定的位置了
				randomStr+=random;
			}
			if (index == 5) break;//达到numbers数组的容量就结束
		}
		System.out.println(randomStr);
		return randomStr;
	}

	/**
	 * 	处理用户技能
	 * @param skillIds
	 * @param skId
	 * @return
	 */
	public static String skillIdDispose(String skillIds,String skId) {
		List<String> list = Arrays.asList(skillIds.split(","));
		List<String> arr = new ArrayList<String>();
		int index = -1;
		for (int j = 0; j < list.size(); j++) {
			if(list.get(j).equals(skId) && index == -1) {
				index = 1;
				continue;
			}else {
				arr.add(list.get(j));
			}
		}
		System.out.println(String.join(",", arr));
		return String.join(",", arr);
	}

	/**
	 * 	在list集合中随机取出指定数量的元素
	 * @param list 取元素的集合
	 * @param count 个数
	 * @return
	 */
	public static List<String> getRandomThreeInfoList(List<String> list, int count) {
		List<String> olist = new ArrayList<String>();
		if (list.size() <= count) {
			return list;
		} else {
			Random random = new Random();
			for (int i = 0 ;i<count;i++){
				int intRandom = random.nextInt(list.size() - 1);
				olist.add(list.get(intRandom));
//				list.remove(list.get(intRandom));
			}
			return olist;
		}
	}


	public static void main(String[] args) {
		skillIdDispose("1,", "1");
	}
}
